package com.ma.myjpa.demo;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * @ClassName GenTest
 * @Author: mayongqiang
 * @DATE 2022/4/13 14:52
 * @Description: 在父类中得到子类继承时传来的泛型的Class对象
 */
public class GenTest {
    public static void main(String[] args) {
        new B();
    }
}

class A<T> {
    public A() {

        // 1、在泛型父类中得到了子类的Class对象
        Class clazz = this.getClass();

        // 2、拿到带泛型的父类 : 打印发现A<T>的Class对象是ParameterizedType的类型的，为了使用它的方法，向下转型
        //Type genericSuperclass = clazz.getGenericSuperclass();
        ParameterizedType genericSuperclass = (ParameterizedType) clazz.getGenericSuperclass();

        // 3、得到子类继承时传来的泛型的Class对象 class java.lang.String
        System.out.println(genericSuperclass.getActualTypeArguments()[0]);

    }
}

class B extends A<String> {

}
